<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <script src="./node_modules/axios/dist/axios.js"></script>
  <title>Document</title>
</head>
<body>
  <script>
    // import axios from 'axios';
    const getRes = (url)=>{
      return axios.get(url).then(res=>{
        return res.data;
      }); 
    };

    /**
     * 总共需获得 100 个成绩大于 90 分，
     * 且时间在2021年12月3日之后的学生的课程成绩，
     * 并按各自成绩从大到小排列返回。
     * 
     * 
     * 浏览器最多可以有 6 个并行的网络请求
     * 尽可能在更短的时间内，运行完成得到结果
     * 尽可能用最少的请求次数
     * 

    */
    // new Date('2021-12-3').getTime();// ?


    function sendRequest(url,max,callback){
      let count = 0;
      const resArr = [];
      const allRes = [];
      let requestCount = 0;
      let flag = false
      // 只要进入到这个方法 就准备请求
      function asyncLoad (){
        count++; // 1  2  3
        console.log('并发数',count);
        requestCount++
        // 吞吐量
        if( count <= max && resArr.length < 100 && !flag){
          // buy(url.shift()).then(()=>{
          // // 此时一张图片就加载完了
          //   count--;
          //   url.length<=0 && --max <= 0 && callback();
          // }).then(imgLoad);

          getRes(url).then(res=>{
            // 控制并发数
            count--;
            let filterArr = res.filter(item=>{
              return (new Date(item.time).getTime()>=new Date('2021-12-3').getTime())&&(item.score>=90);
            })
            // resArr = [...filterArr,...resArr]
            filterArr.forEach(item=>{resArr.push(item);allRes.push(item)});
            // allRes = [...allRes,...resArr]
            if(resArr.length>100&&!flag) {
              callback(resArr.sort((a,b)=>b.score-a.score).slice(0,100),allRes,requestCount);
              flag = !flag;
            }
           
          }).then(()=>{
            return asyncLoad();
          })
          .catch((err)=>{
            console.dir('500');
            count--
            allRes.push(null)
            return asyncLoad();
          })
        }
      }
      for(let i = 0;i<max;i++){
        asyncLoad();
      }
    }

    // 并发度控制在6个以下  浏览器 最大并法量是6 http1.1协议  node 是没有限制的
    sendRequest('http://localhost:4005/getScore',6,(result,allRes,count)=>{
      console.log(result);
      console.log(allRes);
      console.log('请求次数是:',count)
    });
  </script>
</body>
</html>